﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaskelot.SP.Model.Client;
using Kaskelot.SP.Model.Client.Forms;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using Kaskelot.SP.Core;

namespace Kaskelot.SP.Services.Client.Mapping
{
	public static class ClientBlankettPostExtensions
	{
		public static ClientBlankettPost ToClientContract(this BlankettPost entity)
		{
			ClientBlankettPost b = new ClientBlankettPost();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static ClientBlankettPost ToMinimalClientContract(this BlankettPost entity)
		{
			ClientBlankettPost b = new ClientBlankettPost();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static BlankettPost ToContract(this ClientBlankettPost b)
		{
			BlankettPost entity = new BlankettPost();

			CopyToEntity(b, entity);

			return entity;
		}

		public static BlankettPost UpdateContract(this BlankettPost blankett, BlankettForm form)
		{
			if (blankett.Id == Guid.Empty)
			{
				blankett.Id = Guid.NewGuid();
			}

			blankett.Andrad = form.Andrad;

			return blankett;
		}

		private static void CopyFromEntity(BlankettPost from, ClientBlankettPost to, bool minimal)
		{
			to.Id = from.Id;
			to.Skapad = from.Skapad != null ? from.Skapad.ToString("yyyy-MM-dd HH:mm") : null;
			to.Namn = from.Blankett.Namn;
			to.BlankettTyp = from.Blankett.Typ.ToString();
			to.Status = from.Status;

			try
			{
				var fornamn = from.FaltData.Where(fd => fd.FaltNamn == "Förnamn").FirstOrDefault();
				var efternamn = from.FaltData.Where(fd => fd.FaltNamn == "Efternamn").FirstOrDefault();

				if (fornamn != null && efternamn != null)
					to.PersonNamn = fornamn.Data + " " + efternamn.Data;
				else
					to.PersonNamn = "Inget namn";
			}
			catch (Exception) { }
		}

		private static void CopyToEntity(ClientBlankettPost from, BlankettPost to)
		{
			to.Id = from.Id;

			if (from.Skapad != null)
				to.Skapad = DateTime.Parse(from.Skapad);
		}
	}
}
